<?php


/**
* @brief Classe TemplateManager
*
* Cette classe permet de gérer du contenu html dynamiquement
*
*/
class TemplateManager{
	
	private static $_templates = array();
	
	/**
	* @brief Constructeur
	*/
	public function __construct(){}
		
	/**
     * @brief Associe un fichier template (.tpl) à une clef
     *
     * @param string $key Clef du template qui sera associé au fichier dans l'attribut $_files
     * @param file $file Fichier template (.tpl) à charger (si NULL, alors le fichier est considéré comme vide)
     * 
     */
    public function setTemplateFile($key,$file) {
        
        /**
         *  Effacement prélable d'un éventuel contenu à la clef $key
         **/
		if(isset(self::$_templates[$key]))
			self::$_templates[$key] = '';
		
		/**
		 *  Association d'un nouveau contenu template à la clef $key
		 */
		 
		// Si le paramètre $file est NULL, on crée un template vide
		if($file===NULL)
			self::$_templates += array($key => '');
		else{
		// Sinon, on charge le contenu du fichier
			if(!$fp = fopen($file,'r'))
				throw new Exception('Impossible d\'ouvrir le fichier template <b>' . $file . '</b> afin de créer l\'index <b>' . $index .'</b>');
			$content = '';
			while(!feof($fp))
				$content .= fgets($fp,250);
			self::$_templates += array($key => $content);
		}			
	}    
    
	
	/**
     * @brief Modifie la variable $var d'un template préchargé de clef $key 
     * 
     * @param string $key Nom de la clef associée au fichier template contenant la variable à modifier
     * @param string $var Nom de la variable du template à modifier (forme {VARIABLE} )
     * @param string $value Valeur à attribuer à la variable
     * 
     */
    public function parseTemplate($key,$var,$value) {
		self::$_templates[$key] = preg_replace('#\{'.$var.'\}#',$value,self::$_templates[$key]);
	}
	
    /**
     * @brief Renvoie une référence vers le template stocké à la clef $key
     * 
     * @param string $key Nom de la clef associée au fichier template 
     * contenant la variable à modifier
     * @return string $index
     */
    public function getTemplate($key) {
		$result = &self::$_templates[$key];
        return $result;
	}
    
    /**
     * @brief Fusionne deux templates entre-eux : le template de clef $key_src 
     * s'ajoute à la fin de celui de clef $key_dst
     * 
     * @param string $key_src Clef du template source
     * @param string $key_dst Clef du template destination
     * 
     */
    public function mergeTemplates($key_src,$key_dst) {
		if(!isset(self::$_templates[$key_src])&&isset(self::$_templates[$key_dst]))
            throw new Exception("La fusion d'indice n'a pas pu être effectuée correctement");
        self::$_templates[$key_dst].=self::$_templates[$key_src];
        unset(self::$_templates[$key_src]);
	}
    
    /**
     * @brief Affiche le code HTML d'un template (n'oubliez pas de modifier ses variables au préalable) 
     * 
     * @param string $key Nom de la clef associée au fichier template à afficher
     * 
     */
    public function printTemplate($key) {
		if(!isset(self::$_templates[$key]))
			throw new Exception("Le template de clef " . $key . " n'existe pas ou plus");
		else
			echo self::$_templates[$key];
	}
				
	
};

?>
